"""
    线程池 -- concurrent

    方法
        futures.ThreadPoolExecutor 创建线程池 tpool=ThreadPoolExecutor(max_workers)

    submit  往线程池中加入任务   submit(target,args)
    done    线程池中的某个线程是否完成了任务    done()
    result  获取当前线程执行任务的结果         result

    GIL全局锁
        单一cpu工作
        线程安全
    我们也可以去掉这个全局锁，使用pypy的解释器
    当然上边的做法不推荐，而推荐使用多进程 + 多线程
"""
import time, threading, os
from concurrent.futures import ThreadPoolExecutor

# 线程锁
lock = threading.Lock()

def work(i):
    try:
        lock.acquire()
        time.sleep(1)
        return i
    except:
        pass
    finally:
        lock.release()


if __name__ == '__main__':
    with ThreadPoolExecutor(max_workers=5) as executor:
        for i in executor.map(work, range(10)):
            print(i, os.getpid())
